﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web.Mvc;
using eCRAM.Model;

namespace eCRAM.WebSite.Models
{
    /// <summary>
    /// Modéle d'une activité en mode création / édition
    /// </summary>
    public class EditActivityModel
    {
        /// <summary>
        /// Identifiant
        /// </summary>
        [DataType(DataType.Text)]
        public Guid Id { get; set; }

        /// <summary>
        /// Libelle de l'activité
        /// </summary>
        [Required(ErrorMessage = "Le libellé doit être renseigné")]
        [DisplayName("Libellé")]
        public string Name { get; set; }

        /// <summary>
        /// Date de début
        /// </summary>
        [Required (ErrorMessage = "La date de début doit être renseignée")]
        [DisplayName("Date de début")]
        [DataType(DataType.Date, ErrorMessage = "Le format de la date doit être \"jj/mm/aaaa\"")]
        public DateTime StartDate { get; set; }

        /// <summary>
        /// Date de fin
        /// </summary>
        [DisplayName("Date de fin")]
        [DataType(DataType.Date, ErrorMessage = "Le format de la date doit être \"jj/mm/aaaa\"")]
        public DateTime? EndDate { get; set; }

        /// <summary>
        /// Type de l'activité (Forfait, régie, ...)
        /// </summary>
        [Required(ErrorMessage = "La type d'activité doit être renseigné")]
        [DisplayName("Type")]
        public Guid TypeId { get; set; }


        /// <summary>
        /// Type de l'activité (Forfait, régie, ...)
        /// </summary>
        [DisplayName("Chef de projet")]
        public Guid? ProjectLeader { get; set; }

        /// <summary>
        /// Détermine si l'activité est active
        /// </summary>
        [Required]
        [DisplayName("Actif")]
        public bool IsActive { get; set; }

        /// <summary>
        /// Détermine si l'activité est active
        /// </summary>
        [Required]
        [DisplayName("Astreinte")]
        public bool IsAstreinte { get; set; }


        public string TypeActivityLabel { get; set; }
        public string ProjectLeaderName { get; set; }


        /// <summary>
        /// Crée un modéle à partir de l'objet BD associé
        /// </summary>
        /// <param name="activity"></param>
        /// <returns></returns>
        internal static EditActivityModel FromActivity(Activity activity)
        {
            return new EditActivityModel
                       {
                           Id = activity.Id,
                           EndDate = activity.EndDate,
                           IsActive = activity.IsActive,
                           IsAstreinte = activity.IsAstreinte,
                           Name = activity.Name,
                           StartDate = activity.StartDate,
                           TypeId = activity.Type,
                           TypeActivityLabel = activity.ActivityType.Label,
                           ProjectLeader = activity.ProjectLeader,
                           ProjectLeaderName = activity.User != null ? activity.User.ToString() : "",
            };
        }

        /// <summary>
        /// Crée un objet BD associé à partir du modèle
        /// </summary>
        /// <returns></returns>
        internal Activity ToActivity()
        {
            return new Activity
            {
                Id = Id,
                EndDate = EndDate,
                IsActive = IsActive,
                IsAstreinte = IsAstreinte,
                Name = Name,
                StartDate = StartDate,
                Type = TypeId,
                ProjectLeader = ProjectLeader
            };
        }
    }
}